using System;
using System.Collections.Generic;
using System.Text;
using TgcViewer;
using AlumnoEjemplos.TP3D.Collider;
using Microsoft.DirectX.Direct3D;
using Microsoft.DirectX;
using TP;

namespace AlumnoEjemplos.TP3D
{
    class Saltando : EstadoMario
    {
        #region EstadoMario Members
        Vector3 _velocidadSalto;

        public Saltando(Vector3 velocidadSalto)
        {
            this._velocidadSalto = velocidadSalto;
        }

        public void Avanza(Mario mario)
        {
            
        }

        public void Retrocede(Mario mario)
        {
            
        }

        public void Salta(Mario mario)
        {
            
        }

        public void Update(Mario mario, float elapsedTime)
        {
            IList<Placeable> colisiones = CollisionEngine.Instance().AnalizePlaceableCollisions(mario);

            if (this._velocidadSalto.Y < 0 && mario.Position.Y <= EjemploMario._terreno.GetAltura(new Vector3(mario.Position.X, 0, mario.Position.Z)))
            {
                mario.ParateSobre(EjemploMario._terreno);
                return;
            }

            foreach (Placeable colision in colisiones)
            {
                if (this._velocidadSalto.Y < 0 && colision.Position.Y < (mario.Position.Y + 35) && colision is Plataforma)
                {
                    mario.ParateSobre(colision as Plataforma);
                    return;
                }
            }

            this._velocidadSalto = PhysicsUtils.ProximaVelocidad(this._velocidadSalto, new Vector2() , elapsedTime);
            
            mario.MoveTo(_velocidadSalto);

            float z = (float)Math.Cos((float)mario.Mesh.Rotation.Y) * mario.Velocidad.Z * elapsedTime * 1.5f;
            float x = (float)Math.Sin((float)mario.Mesh.Rotation.Y) * mario.Velocidad.Z * elapsedTime * 1.5f;

            mario.Mesh.move(x, mario.Velocidad.Y, z);
        }

        public void Init(Mario mario)
        {
            mario.Rotacion = Mario.VELOCIDAD_ROTACION_INCIAL;
        }

        #endregion

        #region EstadoMario Members


        public void Cae(Mario m)
        {
            
        }

        #endregion
    }
}
